package 剑指专题.其他;


/*
 * Author：江松
 * Date：2023/4/2 10:46
 *
 构建乘积数组：
 1，使用除法
 2，暴力
 3,优化暴力——对角线
 */

import java.util.Arrays;

public class Main1 {

    public int[] multiply(int[] A) {
        int b[]=new int[A.length];
        int len=A.length;
        int djx=1;
        for(int i=0;i<len;++i){
            b[i]=djx;
            djx*=A[i];
        }
        djx=1;
        for(int i=len-1;i>=0;--i){
            b[i]*=djx;
            djx*=A[i];
        }
        return b;
    }

        /*
    //暴力：重复计算了一些值
    public int[] multiply(int[] A) {
        int b[]=new int[A.length];

        Arrays.fill(b,1);
        for(int i=0;i<A.length;++i){
            for(int j=0;j<A.length;++j){
                if(i==j)continue;
                b[i]*=A[j];
            }
        }
        return b;
    }
    */
    /*
    //除法：注意考虑0的情况
    public class Solution {
        public int[] multiply(int[] A) {
            if(A==null||A.length==0)return null;
            //0的个数，最后0的位置，除去0其他数的乘积
            int cnt0=0,loc=0,mul0=1;
            int b[]=new int[A.length];
            for(int i=0;i<A.length;++i){
                if(A[i]==0){
                    cnt0++;
                    loc=i;
                    continue;
                }
                mul0*=A[i];
            }

            if(cnt0==1){
                b[loc]=mul0;
            }else if(cnt0>1){
                return b;
            }else {
                for(int i=0;i<A.length;++i){
                    b[i]=mul0/A[i];
                }
            }

            return b;
        }
        */

}
